void drawButtonBar(cairo_t *context, void (*draw)(cairo_t *, int),
    GUIAction **actions, int length) {
  int lastBlock;
  for(int i = 0; i < length; i = lastBlock + 1) {
    for(lastBlock = i; lastBlock < length - 1 &&
        !actions[lastBlock]->isActive() &&
        !actions[lastBlock + 1]->isActive(); ++lastBlock) { }

    cairo_new_path(context);
    for(int j = i * 6; j != -1; j = nextButtonDrawIndex(j, i, lastBlock)) {
      draw(context, j);
    }
    cairo_close_path(context);

    cairo_set_line_width(context, 1);
    setButtonColor(context, actions[i]->getType());
    cairo_fill(context);
  }
}
